package dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


import model.Fatura;
import jdbc.ConnectionFactory;

public class FaturaDao {
	private Connection connection;

	public FaturaDao() {

		this.connection = new ConnectionFactory().getConnection();

	}

	// CRUD salvar

	public void salvar(Fatura fatura) {
		String sql = "INSERT INTO filme + (retirada,data_pagamento,filme_alugado,preco_filme,situacao,data_devolucao) + VALUES (?,?,?,?,?,?)";

		try {

			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, fatura.getSituacao());
			stmt.setFloat(2, fatura.getPreco_filme());
			stmt.setString(3, fatura.getId_filme_alugado());
			stmt.setDate(4, new Date(fatura.getData_devolucao().getTime()));
			stmt.setDate(5, new Date(fatura.getData_pagamento().getTime()));
			stmt.setDate(6, new Date(fatura.getRetirada().getTime()));
			
			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			throw new RuntimeException(e);

		}
	}

	// CRUD Listar	

	public List<Fatura> Listar() {

		try {
			List<Fatura> faturas = new ArrayList<Fatura>();
			String SQL = "SELECT * FROM filme";
			PreparedStatement stmt = connection.prepareStatement(SQL);
			ResultSet rs = stmt.executeQuery();
			while (rs.next()) {
				
				Fatura fatura = new Fatura();
				
				fatura.setSituacao(rs.getString("situacao"));
				fatura.setId_filme_alugado(rs.getString("id_filme_alugado"));
				fatura.setPreco_filme(rs.getFloat("preco_filme"));	
				fatura.setData_pagamento(rs.getDate("data_pagamento"));			
				fatura.setData_devolucao(rs.getDate("data_devolucao"));
				fatura.setRetirada(rs.getDate("retirada"));				
				

				faturas.add(fatura);
			}

			rs.close();
			stmt.close();

			return faturas;

		} catch (SQLException e) {
			throw new RuntimeException( e);
		}

	}

	// CRUD Remover

	public void remover(Fatura filme) {
		try {
			PreparedStatement stmt = connection.prepareStatement("delete from filme where id_filme=?");
			stmt.setLong(1, filme.getId_fatura());
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);

		}
	}

	// CRUD Alterar
	

	public void altera(Fatura fatura) {

		String sql = "update fatura set situacao=?, preco_filme=?, data_devolucao=?, data_pagamento=?, retirada=?, filme_alugado=? where id=?";

		try {		

			PreparedStatement stmt = connection.prepareStatement(sql);
			
			stmt.setString(1, fatura.getSituacao());
			stmt.setFloat(2, fatura.getPreco_filme());
			stmt.setString(3, fatura.getId_filme_alugado());
			stmt.setDate(4, new Date(fatura.getData_devolucao().getTime()));
			stmt.setDate(5, new Date(fatura.getData_pagamento().getTime()));
			stmt.setDate(6, new Date(fatura.getRetirada().getTime()));
			stmt.setLong(7, fatura.getId_fatura());

			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

	// CRUD Buscar

	public Fatura buscar(int id) {

		try {

			Fatura fatura = new Fatura();
			String SQL = "SELECT * FROM cliente WHERE id_fatura = ?";
			PreparedStatement stmt = connection.prepareStatement(SQL);
			ResultSet rs = stmt.executeQuery();

			rs.next();
			fatura.setSituacao(rs.getString("situacao"));
			fatura.setId_filme_alugado(rs.getString("id_filme_alugado"));
			fatura.setPreco_filme(rs.getFloat("preco_filme"));	
			fatura.setData_pagamento(rs.getDate("data_pagamento"));			
			fatura.setData_devolucao(rs.getDate("data_devolucao"));
			fatura.setRetirada(rs.getDate("retirada"));	;

			return fatura;

		} catch (SQLException e) {
			throw new RuntimeException(e);
		}

	}
}
